﻿#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "BinaryTreeBasicHandler.h"

typedef TreeNode* QueueDataType;

typedef struct ListNode
{
	struct ListNode* next;
	QueueDataType data;
}ListNode;

typedef struct Queue
{
	ListNode* head;	// 指向队列的头
	ListNode* tail;	// 指向队列的尾
}Queue;

// 队列-工具函数
// 申请节点
ListNode* BuyListNode(QueueDataType data);

// 队列-基本操作函数
// 初始化队列
void QueueInit(Queue* queue);
// 队尾插入 / 入队
void QueuePush(Queue* queue, QueueDataType data);
// 队头弹出 / 出队
void QueuePop(Queue* queue);
// 获取队头元素
QueueDataType QueueFront(Queue* queue);
// 获取队尾元素
QueueDataType QueueBack(Queue* queue);
// 获取队列中有效元素个数
size_t QueueSize(Queue* queue);
// 判断队列是否为空
int QueueEmpty(Queue* queue);
// 销毁队列
void QueueDestory(Queue* queue);